/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package cl.web.jsf.util;

/**
 *
 * @author Vogel
 */
public class Rut {
/**
	 * Metodo que valida el rut (111111-1)
	 * Fecha : 07 11 2012
	 * @author 714703
	 * @param String
	 * @return ValidateResult
	 * */
	public static ValidateResult validateRUT(String rutIn){
		  ValidateResult result = new ValidateResult();
		  String rut = rutIn;
		  if (rut.length() > 11){
		   result.setErrorResult("RUT, con largo invalido");
		  }
		  else if (rut.matches("[0-9]+[-]+[0-9K]+")){

		      int suma = 0; //variable de suma parcial
		      int mult = 2; //variable de numero multiplicador

		      rut = rut.toUpperCase();

		      //Iniciamos el loop para calcular la suma de los digitos
		      for (int i=rut.indexOf('-')-1;i>=0 ;i-- )
		      {
		    //Agarramos el numero actual y lo convertimos a numero
		    String actual = rut.substring(i,i+1);
		    int num_actual = Integer.parseInt(actual);

		    //Lo agregamos a la suma parcial
		    suma = suma + num_actual * mult;

		    //Incrementamos o reiniciamos el multiplicador
		    if (mult == 7)
		    {
		     mult = 2;
		    }
		    else
		    {
		     mult++;
		    }
		      }

		      //Sacamos el resto de la division suma entre 11
		      suma = suma % 11;

		      //Restamos a 11 el resto anterior
		      suma = 11 - suma;

		      //Agarramos el verificador y lo transformamos a numero
		      String verif = rut.substring(rut.indexOf('-')+1,rut.length());

		      int num_verif;

		   if (verif.equals("K"))
		   {
		    num_verif = 10;
		   }
		   else if (verif.equals("0"))
		   {
		    num_verif = 11;
		   }
		   else
		   {
		    num_verif = Integer.parseInt(verif);
		   }


		   //Comprobamos si el verificador coincide con el numero calculado
		   if (num_verif != suma)
		   {
		    result.setErrorResult("RUT Invalido (Digito Verificador)");
		   }
		   else {
		    result.setSuccesfulResult("RUT, valido");

		   }
		     }
		     else {
		   result.setErrorResult("RUT, con formato invalido");
		     }
		  return result;
		 }
}

